const { getCategory } = require('../service/category')
const { getAllAndCountItems, getItem } = require('../service/item')

/**
 * 首页的控制器
 * @param {object} ctx koa中的上下对象
 * @param {function} next 回调函数
 */
exports.homePage = async function (ctx, next) {
  // 业务处理  service
  // 获取商品列表和分类
  let categoryItems = []
  for (let i in ctx.state.categories) {
    const items = await getAllAndCountItems({ categoryId: ctx.state.categories[i].id, pageSize: 5 })
    const result = { ...ctx.state.categories[i], ...items }
    categoryItems.push(result)
  }
  console.log(categoryItems)
  // console.log(JSON.stringify(categoryItems, null, 2))
  // 渲染页面
  await ctx.render("index", {
    categoryItems: categoryItems
  })
}

// 发送所有数据->home页面getAllItems
exports.getAllItems = async function (ctx, next) {
  // 业务处理  service
  // 获取商品列表和分类
  let categoryItems = []
  for (let i in ctx.state.categories) {
    const items = await getAllAndCountItems({ categoryId: ctx.state.categories[i].id, pageSize: 5 })
    const result = { ...ctx.state.categories[i], ...items }
    categoryItems.push(result)
  }
  console.log(categoryItems)
  // console.log(JSON.stringify(categoryItems, null, 2))
  // 渲染页面
  ctx.body = categoryItems
}


/**
 * 列表的控制器
 * @param {object} ctx koa中的上下对象
 * @param {function} next 回调函数
 */
exports.listPage = async function (ctx, next) {
  // 获取id
  const { categoryId } = ctx.params
  let { pageNum, pageSize } = ctx.query
  if (pageNum) {
    pageNum = Number(pageNum)
  }
  if (pageSize) {
    pageSize = Number(pageSize)
  }
  // 获取商品列表和分类
  const result = await getAllAndCountItems({ categoryId, pageNum, pageSize })
  // 获取商品类别
  const category = await getCategory(categoryId)
  // 渲染页面
  await ctx.render("list", { category, ...result })
}

/**
 * 详情页的控制器
 * @param {object} ctx koa中的上下对象
 * @param {function} next 回调函数
 */
exports.detailPage = async function (ctx, next) {
  const { id } = ctx.params  // 获取id
  // 获取商品列表和分类
  const item = await getItem(id)
  // console.log(item.comments)
  // 渲染页面
  await ctx.render("detail", { ...item })
}
